Many peripherals (i.e., printers and scanners) use the modular input/output (MIO) scheme where a modular input/output (I/O) card carries memory that is used to communicate with the peripheral. The memory, while residing on the I/O card, is also (at least in part) accessible to the processor(s) of the peripheral. This MIO scheme is described in Campbell et al., U.S. Pat. No. 5,197,128 and will be referred to as the conventional MIO protocol.
Since the memory resides on an individual I/O card in the conventional MIO protocol, the memory cannot be used by the peripheral to service another I/O card. Consequently, an I/O card's memory may wait unused while another I/O card operates at reduced efficiency for lack of memory.
In the conventional MIO protocol, the I/O card passes control of the memory to the peripheral during peripheral--I/O card initialization. The memory is logically broken up by the peripheral into smaller entities called buffers. The buffer size is based on a one time negotiation between the peripheral and the I/O card. The buffer size is fixed at initialization and may not be varied during normal operation. Since the buffer size is fixed, the peripheral must allocate a buffer to each I/O card which is at least large enough to serve the maximum data transfer which is likely to occur.
One prior art solution to the problem of fixed buffer size is to allocate a small buffer to the I/O card and copy data from I/O card memory into printer memory as necessary to free up I/O buffers. However, this solution takes processor time and bandwidth away from other operations, resulting in slower processing of other operations.
During operation, control (ownership) of the buffers moves back and forth between the peripheral and the I/O card. However, once the peripheral assigns buffers to an I/O channel of an I/O card, the peripheral cannot reclaim the buffer without an I/O card reset. Therefore, those buffers which were assigned to an I/O channel are essentially unavailable to other I/O channels that may be operating at reduced efficiency due to smaller buffer size. As a result, each I/O channel must be equipped with enough memory to serve anticipated I/O channel needs. This results in an unneeded duplication of costly memory and a reduced ability to increase memory by the addition of optional memory modules.
The conventional MIO protocol is adequate for peripherals with single I/O channels, but becomes strained under the increasing demands of peripherals with multiple I/O cards (or cards with multiple channels).
Accordingly, objects of the present invention are to provide a new system for managing memory between peripheral devices and I/O cards that overcomes the aforementioned limitations associated with conventional systems, that permits the peripheral devices to (1) allocate memory among I/O channels of the I/O card, based on the needs of each I/O channel; (2) allocate memory among the I/O cards based on the needs of each card; and (3) resize buffers during normal operation, without an I/O card reset.